#include "byte_array.h"
#include "string.h"
CByteArray::CByteArray()
{
	m_is_big_endian = false;
	m_data_pkt.reserve(128);
}

CByteArray::~CByteArray()
{
}

void CByteArray::push_byte(uint8_t value)
{
	m_data_pkt.push_back(value);
}

void CByteArray::push_uint16(int value)
{
	U16ToU8Array u16converter;
	u16converter.u16val = (uint16_t)value;
	
	m_data_pkt.push_back(u16converter.u8array[0]);
	m_data_pkt.push_back(u16converter.u8array[1]);

}

void CByteArray::push_uint32(uint32_t value)
{
	U32ToU8Array u32converter;
	u32converter.u32val = value;

	for (auto byte : u32converter.u8array)
	{
		m_data_pkt.push_back(byte);
	}
}

void CByteArray::push_uint64(uint64_t value)
{
	U64ToU8Array converter;
	converter.u64val = value;

	for (auto byte : converter.u8array)
	{
		m_data_pkt.push_back(byte);
	}
}

void CByteArray::push_uint16_be(int value)
{
	U16ToU8Array u16converter;
	u16converter.u16val = EndianSwap16(value);

	m_data_pkt.push_back(u16converter.u8array[0]);
	m_data_pkt.push_back(u16converter.u8array[1]);
}

void CByteArray::push_uint32_be(uint32_t value)
{
	U32ToU8Array u32converter;
	u32converter.u32val = EndianSwap32(value);

	for (auto byte : u32converter.u8array)
	{
		m_data_pkt.push_back(byte);
	}
}


void CByteArray::push_uint64_be(uint64_t value)
{
	U64ToU8Array converter;
	converter.u64val = EndianSwap64(value);

	for (auto byte : converter.u8array)
	{
		m_data_pkt.push_back(byte);
	}
}
void CByteArray::push_string(string str)
{
	for (auto byte : str)
	{
		m_data_pkt.push_back(byte);
	}
}
void CByteArray::print_byte(const char* title)
{
	int i = 0;
	char tmp_buf[8196] = { 0 };
	int len = 0;

	sprintf(tmp_buf, "%s len %d ", title, m_data_pkt.size());
	len = strlen(tmp_buf);
	for (i = 0; i < m_data_pkt.size(); i++)
	{
		sprintf(tmp_buf + len, "%02x ", m_data_pkt[i]);

		len = strlen(tmp_buf);
	}
	sprintf(tmp_buf + len, "\n");
	printf(tmp_buf);
}
